/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package espe.ccsoft.dao;

import espe.ccsoft.models.Rol;
import espe.ccsoft.orm.ORMBase;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author misahaelfernandez
 */
public class RolDao extends ORMBase<Rol> {

    public final void insert(final Rol rol) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        rol.setEstado(true);
        rol.setFecha_creacion(new java.sql.Timestamp(new java.util.Date().getTime()));
        super.insertSql = "INSERT INTO ROL ("
                + "ROL_NOMBRE,"
                + "ROL_DESCRIPCION,"
                + "ROL_FECHACREACION,"
                + "ROL_ESTADO"
                + ") VALUES(?, ?, ?, ?)";
        super.insert(new Object[]{
            rol.getNombre().toUpperCase(),
            rol.getDescripcion(),
            rol.getFecha_creacion(),
            rol.isEstado(),});
    }

    public final void update(final Rol rol) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.updateSql = "UPDATE ROL SET "
                + "ROL_NOMBRE=?, "
                + "ROL_DESCRIPCION=?, "
                + "ROL_ESTADO=? "
                + "WHERE ROL_ID=?";
        super.update(new Object[]{
            rol.getNombre(),
            rol.getDescripcion(),
            rol.isEstado(),
            rol.getId(),});
    }

    public final Rol findByPK(final int id_rol) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findByPkSql = "select * FROM ROL"
                + " WHERE ROL_ID=?";
        return super.findByPK(new Object[]{
            id_rol,});
    }

    public final Rol findByNombre(final String nombre) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findByPkSql = "SELECT * FROM ROL"
                + " WHERE ROL_NOMBRE = ? AND "
                + "ROL_ESTADO=1";
        return super.findByPK(new Object[]{
            nombre,});
    }

    public final List<Rol> findAllByNombre(final String nombre) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findSomeSql = "SELECT * FROM ROL"
                + " WHERE (ROL_NOMBRE LIKE ?) AND "
                + "ROL_ESTADO=1";
        return super.findSome(new Object[]{
            nombre,});
    }

    public final List<Rol> findAllByPermisos(final int id_permiso) throws Exception {
        super.findSomeSql = "SELECT r.ROL_ID, r.ROL_NOMBRE, r.ROL_DESCRIPCION, r.ROL_ESTADO, r.ROL_FECHACREACION "
                + "FROM ROL as r, PERMISOS_ROL as per_rol "
                + "WHERE r.ROL_ID=per_rol.ROL_ID "
                + "AND per_rol.PERM_ID=?";
        return super.findSome(new Object[]{
            id_permiso,});
    }

    @Override
    public final List<Rol> findAll() throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findAllSql = "SELECT * FROM ROL WHERE ROL_ESTADO=1";
        return super.findAll();
    }

    @Override
    protected Rol crearObjeto(final ResultSet rs) throws SQLException {
        Rol rol = new Rol();
        rol.setId(rs.getInt("ROL_ID"));
        rol.setNombre(rs.getString("ROL_NOMBRE"));
        rol.setDescripcion(rs.getString("ROL_DESCRIPCION"));
        rol.setFecha_creacion(rs.getTimestamp("ROL_FECHACREACION"));
        rol.setEstado(rs.getBoolean("ROL_ESTADO"));
        return rol;
    }
}
